/*
 * Copyright (C) 2010-2011 Graz University of Technology, Austria. All Rights reserved. 
 *
 * Contact: Simone Kopeinik <simone.kopeinik@tugraz.at>
 * 	   Graz University of Technology, Knowledge Management Institute, Brückenkopfgasse 1/6, 8020 Graz 	
 * 	   <http://www.kmi.tugraz.at/>
 * 
 * This software is part of the TARGET platform developed by the
 * TARGET EC-funded project www.reachyourtarget.org
 *
 * This software is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 3.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * The GNU General Public License is available at <http://www.gnu.org/licenses/>.
 *
 */
package at.tugraz.kmi.css.cbkst2.prereq.structurevis;

import at.tugraz.kmi.css.cbkst2.CbKSTCompetence;
import at.tugraz.kmi.css.cbkst2.PrerequesiteRelation;

import com.jgoodies.binding.value.AbstractConverter;
import com.jgoodies.binding.value.ValueModel;

import edu.uci.ics.jung.algorithms.layout.ISOMLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.graph.Graph;

/**
 * Converts a Graph to a Graph Layout. Defaults to FRLayout Algorithm.
 * 
 * Useful in regards to the JGoodies Bindings.
 * 
 * @author Georg Öttl
 * 
 */
public final class ISOMLayoutConverter extends AbstractConverter {

	private static final long	serialVersionUID	= 1L;

	/**
	 * Default constructor,
	 * 
	 * @param subject
	 *            The subject to convert. The subject to convert. Has to be a
	 *            ValueModel of a prerequesiteGraph.
	 */
	public ISOMLayoutConverter(ValueModel subject) {
		super(subject);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void setValue(Object newValue) {
		Layout<CbKSTCompetence, PrerequesiteRelation> layout = (Layout<CbKSTCompetence, PrerequesiteRelation>) newValue;
		subject.setValue(layout.getGraph());
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Object convertFromSubject(Object subjectValue) {
		Layout<CbKSTCompetence, PrerequesiteRelation> frLayout2 = new ISOMLayout<CbKSTCompetence, PrerequesiteRelation>(
				(Graph<CbKSTCompetence, PrerequesiteRelation>) subjectValue);
		return frLayout2;
	}
}